v0.7.26: API block default headers fix, tables perf and correctness, landing redesign#5500
Conversation
waleedlatif1
commented
Jul 8, 2026
- fix(notion): align integration with live API docs, add block retrieval coverage (fix(notion): align integration with live API docs, add block retrieval coverage #5491)
- feat(custom-block): audit-log publish, update, and unpublish events (feat(custom-block): audit-log publish, update, and unpublish events #5493)
- fix(tables): server-authoritative run badge, tail SSE from latest, harden Stop-all (fix(tables): server-authoritative run badge, tail SSE from latest, harden Stop-all #5492)
- fix(tables): canonicalize date cells, render times in effective timezone (fix(tables): canonicalize date cells, render times in effective timezone #5465)
- fix(api-block): stop spoofing a browser fingerprint on outbound HTTP requests (fix(api-block): stop spoofing a browser fingerprint on outbound HTTP requests #5496)
- fix(copilot): don't surface custom blocks whose definition was deleted (fix(copilot): don't surface custom blocks whose definition was deleted #5498)
- fix(knowledge): accept relative internal file URLs in document processor (fix(knowledge): accept relative internal file URLs in document processor #5499)
- feat(db): auto-apply tracked script data migrations in db:migrate (feat(db): auto-apply tracked script data migrations in db:migrate #5497)
- improvement(landing): homepage redesign with live hero and real platform UI feature cards (improvement(landing): homepage redesign with live hero and real platform UI feature cards #5408)
…l coverage (#5491) * fix(notion): align integration with live API docs, add block retrieval coverage - wire up notion_update_page in the block (was registered but unreachable — no dropdown option or subBlocks) - fix legacy NotionBlock outputs to cover all 17 operations, not just content/metadata - trim ID params (pageId, databaseId, parentId) before use in request URLs across 8 tool files - remove content required:true on create_page (Notion allows title-only pages) - remove dead unused NotionReadDatabaseParams interface - add notion_retrieve_block/_v2 tool for GET /v1/blocks/{id}, filling a gap in block CRUD coverage * fix(notion): second validation pass — pagination gaps, phantom outputs, dead types, regen docs - add missing startCursor/start_cursor pagination param to notion_query_database and notion_search - fix notion_search missing from the shared pageSize/startCursor field's operation condition in NotionBlock - fix NotionV2Block title/url/created_time/last_edited_time outputs rendering unconditionally for every operation instead of only the ones that return them - remove 153 lines of dead unused output-shape constants from types.ts - regenerate integration docs * fix(notion): expose retrieve-block outputs in legacy block picker type/block/archived only conditioned on notion_update_block/notion_delete_block, and has_children was missing entirely — Retrieve Block's payload was invisible in the legacy NotionBlock output picker (Greptile P1 on PR #5491). * fix(notion): document type-specific content gap on retrieve_block output block.properties (BLOCK_OUTPUT_PROPERTIES) only covers common block fields, not the type-specific sub-object (paragraph.rich_text, image.file, etc.) — that varies per block type and isn't enumerable. Documented in the description per Greptile P2 on PR #5491; no functional change, block: data already carries the full object at runtime.
…rden Stop-all (#5492) * fix(tables): server-authoritative run badge, tail SSE from latest, harden Stop-all * fix(tables): return null dispatchId when Stop-all cancels a run during prep * improvement(tables): co-locate dispatcher imports, stamp throttle clock only on fetch start * fix(tables): table-wide hasRunning signal for Queueing label, fail fast on seq-read errors * fix(tables): clear hasRunning on table-wide stop, refetch rows when a run resolves without a dispatch * fix(tables): don't let dispatch-cancel cleanup mask the original prep failure * fix(tables): reconcile null-dispatch runs via invalidation, not stale snapshot restore * fix(tables): widen warm-cache remount check to either query cache
…one (#5465) * fix(tables): canonicalize date cells, render times in effective timezone * improvement(tables): render date cells wall-clock-faithful via offset-preserved storage * fix(tables): address review — preserve midnight instants, validate calendar days, effective-zone Today
…requests (#5496) * fix(api-block): stop spoofing a browser fingerprint on outbound HTTP requests getDefaultHeaders() sent a Chrome User-Agent, a Referer pointing at Sim's own app, and mismatched Sec-Ch-Ua client hints on every API block request. Atlassian's Jira/Confluence Cloud REST API (and other browser-aware anti-CSRF/bot-defense layers) reject requests carrying a browser User-Agent with 403 "XSRF check failed", even with a valid Basic-auth header and X-Atlassian-Token: no-check set. Default headers now identify honestly as Sim, matching how other HTTP clients (curl, Postman, axios) behave. User-supplied headers still override any default. * fix(testing): sync shared tool-tester mock headers with new defaults createMockHeaders in the shared @sim/testing tool-tester builder still hardcoded the old Chrome UA / Referer / Sec-Ch-Ua fallback values. It was unreachable in current tests but would silently diverge from production getDefaultHeaders() for any future test hitting its fallback path.
#5498) * fix(copilot): keep custom blocks out of the VFS static component cache so a deleted definition doesn't linger * fix(copilot): drop deleted-definition custom blocks from a workflow's state so the copilot can't see unrenderable blocks * fix(copilot): don't strip placed custom blocks when the definition load fails (null vs empty set) * refactor(copilot): drop unreachable static-cache custom-block filter The VFS static cache is only ever built by materialize(), which runs outside any custom-block overlay (the overlay is scoped to edit_workflow / get_blocks_metadata, neither of which materializes the VFS). So getAllBlocks() there always returns first-party blocks only and no custom block can be frozen into the cache. Removed the dead guard.
…orm UI feature cards (#5408) * improvement(landing): homepage redesign with live hero and real platform UI feature cards * improvement(landing): build-card workflow showcase, real Logs UI monitor window, proportional feature cards - Build card: replace the Mothership chat loop with a static left-to-right support-triage workflow showcase (two triggers converging on a triage agent, fanning out to Linear/Slack/Gmail/Tables) on the hero's solid --surface-3 stage, with the goo cycle loader phasing in the bottom-left corner; the chat animation component stays parked in build-callout/components for reuse - Monitor card: swap the floating logs panel for the REAL platform Logs page captured as a full window (new capture-logs-ui pipeline), framed and positioned identically to the Context card, over a new canyon backdrop - Feature cards scale like Cursor's: media stages are aspect-locked (3:2 desktop, 4:3 stacked) instead of fixed-height, and the UI-window callouts use percentage insets so the whole composition scales proportionally with the browser - Eyebrow chips relocate into the copy column above the title on stacked breakpoints instead of overlapping the full-width media - Extract the hero stage's block card for reuse; export the horizontal smoothstep edge helper; drop the unused formation-graph and logs-table-preview components Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(landing): use surface-hover token for voice input button Matches the token already used by its sibling composer buttons instead of a raw hex hover color. * fix(landing): restore SandboxWorkspacePermissionsProvider for the capture harness Staging removed the sandbox provider as unused when the academy pages were deleted (#5388), but the landing-preview capture route committed on this branch imports it - the branch failed to compile after rebasing. Restore the lightweight provider with its consumer documented. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(landing): satisfy HydrationState type in capture harness The mock hydration state set by the readme-tour-capture route was missing the required requestId/error fields added to HydrationState, breaking the production typecheck. * fix(landing): address Greptile/Cursor review findings - hero.tsx: object-top-left isn't a real Tailwind v3 utility, so the crop fell back to center; use object-left-top. - hero-workflow-stage.tsx: byId/builtIds were rebuilt on every render, including every drag pointermove frame; hoist the STAGE_BLOCKS lookup to module scope and memoize builtIds on builtCount. - hero-platform-loop.tsx: prefers-reduced-motion was only read once on mount, so toggling it mid-loop didn't stop the scheduled animation; listen for the media query's change event like BuildChatAnimation does. - landing-preview/page.tsx and readme-tour-capture/[workspaceId]/page.tsx: both are dev/preview-only scaffolds (one explicitly "local-only... delete before committing") that were reachable in production with no auth guard. 404 them outside of production instead of leaving them open. * fix(landing): reset fading when reduced motion cuts the loop short showFinished (added when wiring up the prefers-reduced-motion change listener) set the finished phase but left fading true if the preference flipped mid reset-fade, leaving HeroChatLoop stuck at opacity-0. * fix(landing): sync reduced-motion mid-reply in HeroChatLoop The word-reveal effect only checked prefers-reduced-motion once per showReply transition. If HeroPlatformLoop's showFinished set phase to 'reply' while it was already 'reply' (no re-render, no dependency change), the running stream interval kept ticking at normal speed instead of snapping to the full reply. Listen for the media query's change event, mirroring the fix already applied to HeroPlatformLoop and BuildChatAnimation. * fix(landing): sync reduced-motion mid-entrance in HeroStat HeroStat's staggered count-up entrance only checked prefers-reduced-motion once on mount, unlike the hero loops in this PR that now listen for the media query's change event. Toggling the preference mid-entrance left the scheduled timers/RAF running instead of snapping to the settled value. * fix(landing): stop double-seeding query cache in capture harness seed(queryClient) ran inside a useState lazy initializer, a render-phase side effect that Strict Mode invokes twice. Replace it with a ref guard so the store mutation runs exactly once, still synchronously before first paint. Flagged across three Greptile review rounds. * fix(landing): type the capture harness log filter seed as LogFilters qc.setQueryData(logKeys.list(...)) requires LogFilters, but the inline seed object had no annotation and timeRange inferred as string, which TypeScript widened past the TimeRange literal union. Failed prod build type-check. Also swap the stray `sandbox` prop back to `embedded` to match Workflow's actual prop name. --------- Co-authored-by: andresdjasso <andresdjasso@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: waleed <walif6@gmail.com>
|
Too many files changed for review. ( Bypass the limit by tagging |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR SummaryMedium Risk Overview Features drops FeatureStage / live preview backdrops for FeatureCard outlined cards with photo backdrops and real UI captures (IntegrationsCallout, KnowledgeCallout, LogsCallout); Build uses a static WorkflowShowcase + ThinkingLoader. HeroCta and TrustedBy ( Custom blocks API records audit events on update and delete (and publish elsewhere) via Notion integration docs add Reviewed by Cursor Bugbot for commit 4aba3dc. Configure here. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 4aba3dc. Configure here.
